package bit;

public class 位1的个数_191{
            // you need to treat n as an unsigned value
            public int hammingWeight(int n) {
                // 两种性质解法

                // x & -x 是最小的1往后保留位数 利用这个性质
                int cnt = 0;
                //while(n != 0) {
                //    n -= n & (-n);
                //    cnt ++;
                //}
                //return cnt;

                // n & (n - 1) 就是去掉最后一个1  如  6 = 110  6 -1 = 5 = 101  6 & (6-1) = 100 = 4 利用这个性质
                while (n != 0) {
                    n &= n -1 ;
                    cnt ++;
                }
                return cnt;
            }
        }
